require "import"
import "android.speech.SpeechRecognizer"
import "android.speech.RecognitionListener"
import "android.speech.RecognizerIntent"
import "java.util.Locale"
import "android.content.Intent"
function capWords(str)
return str:gsub("(%S+)", function(word)
return word:gsub("%a", string.upper, 1)
end)
end
function kill()
speechRecognizer.destroy()
speechRecognizer = nil
return true
end
function startListening()
speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this)
speechListener = RecognitionListener{
onResults = function(results)
data = results.getParcelableArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
if data ~= nil and data.size() > 0 then
service.paste("  "..capWords(data.get(0))..".\n")
service.speak("  "..capWords(data.get(0)))
end
kill()
end,
onError=function()
kill()
startListening()
end}
recognizerIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault())
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName())
speechRecognizer.startListening(recognizerIntent)
speechRecognizer.setRecognitionListener(speechListener)
end
startListening()